import { getUserInfo, login } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { constantRoutes, resetRouter } from '@/router'

const state = {
  token: getToken(), // 调用本地存储的方法 获得token
  userInfo: {},
  routes: constantRoutes

}
const mutations = {
  // 定义方法 将token存入state库
  // 参数1 store库  参数2 数据
  updateToken(state, payload) {
    state.token = payload // 更新库中的token
    setToken(payload) // 本地存储token
  },
  // 定义方法删除token
  deleteToken(state) {
    state.token = '' // 删除store库中的token
    removeToken() // 删除本地token
  },
  setUserInfo(state, payload) {
    state.userInfo = payload
  },
  setRoutes(state, newRoutes) {
    state.routes = [...constantRoutes, ...newRoutes]
  }
}

const actions = {
  // payload == form数据
  async login(context, payload) {
    // todo 调用登录接口
    const token = await login(payload) //   api封装的login函数  返回一个promise
    context.commit('updateToken', token)
  },
  logout(context) {
    context.commit('deleteToken')
    // 清除用户信息
    context.commit('setUserInfo', {})

    resetRouter()
  },
  async getUserInfo(context) {
    // 调用接口获得信息
    const result = await getUserInfo()
    // 提供方法 在路由守卫中调用方法
    context.commit('setUserInfo', result)
    return result
  }
}

export default {
  namespaced: true, // 开启命名空间
  state,
  mutations,
  actions
}
